import numpy as np
import matplotlib.pyplot as plt
# 样本集
X= np.array([[2,5],[4,6],[3,1],[6,4],[7,2],[8,4],[2,3],[3,1],[5,7],[6,9],[12,16],[10,11],[15,19],[16,12],[11,15],[10,14],[19,11],[17,14],[16,11],[13,19]])

#定义初始化质心
C = np.array([[1.0, 2.0], [2.0, 8.0],[1.2,1.4]])##定义初始化聚类中心点
#重复计算质心5次
iter = 6
while iter>=0:
    iter -= 1
    SSE = []
    B = [] #每个样本点到聚类中心的距离
    for c in C:#第一次c=（1，2），第二次c=（2，8）
        #计算每个点到质心的欧式距离
        dis = np.sqrt(((X - c)**2).sum(axis=1))
        # print(dis)
        B.append(dis)#
    #求样本点属于哪一个类别
    #B [3行,20列]
    min_idx = np.argmin(np.array(B),axis=0)#=[0,1,1,0]##，样本点选聚类中心的索引

    for i in range(len(C)):#样本点数[0.1]
        #更换每个聚类中心的位置
        C[i] = np.mean(X[min_idx == i],axis=0)

#打印所有样本的所属的簇
print(min_idx)
print(C)
plt.scatter(X[:,0],X[:,1],c=min_idx)
plt.scatter(C[:,0],C[:,1],marker='*')
plt.show()